草庐IT

C++ unique_ptr 和映射

全部标签

c++ - 如何在 Windows 上将 BYTE 数组映射为 FILE *

我发现了旧的、巨大的开源代码,它对存储在磁盘文件中的二进制数据执行一些计算,输出也保存为二进制文件。我想使用一种根方法,简化签名:intmagic(FILE*input,FILE*output);问题是我将输入数据存储在进程内存中,我希望输出也作为进程内存。代码太大,我无法在合理的时间内重写它。这个API迫使我在每次调用magic()时进行两次巨大的I/O。是否有可能在Windows上使用C/C++机制将BYTE数组映射为FILE*? 最佳答案 看来你需要fmemopen的功能:http://man7.org/linux/man-p

windows - 从映射的网络驱动器快速复制文件

谁能告诉我如何从映射的网络驱动器快速复制文件?WindowsCopyPaste运行速度非常慢,影响了系统的性能。我使用了XCOPYsourcedestination/i/s/z/q这已经够快了,复制了几个文件,然后抛出了一个错误“指定的网络名称不可用”我记得有人使用变通方法从映射的网络驱动器快速复制文件。有人可以建议我一种方法吗?我使用WindowsXP,所以请不要向我推荐RoboCopy。 最佳答案 RoboCopy在WinXP上运行良好。包含RoboCopy的WindowsServer2003资源工具包可以在XP上正常安装。ht

Windows 32 位虚拟内存页面映射问题

我正在从这里学习Windows32位虚拟内存页面映射,(我的目标是现代Windows版本,例如Vista、Win7、Server2003/200832位版本。)http://blogs.msdn.com/ericlippert/archive/2009/06/08/out-of-memory-does-not-refer-to-physical-memory.aspx两个困惑,用户空间虚拟内存空间通常限制为2G,但物理磁盘页面存储可能远大于2G。由于磁盘页面的数量多于虚拟内存页面的数量,因此理论上可以将多个磁盘页面映射到一个虚拟地址页面。如果用户请求访问某个虚拟地址,如果多个磁盘页面映

windows - 如何使用 Autohotkey 将大写锁定键重新映射到 EMACS super?

该站点展示了如何使用注册表。http://www.emacswiki.org/emacs/JonasOster 最佳答案 Anotherpageonemacswiki在AutoHotKey中建议这样做:#IfWinActiveemacs;ifinemacs+Capslock::Capslock;makeshift+Caps-LocktheCapsLocktoggleCapslock::Control;makeCapsLockthecontrolbutton#IfWinActive;endifinemacs

windows - Windows 中内存映射文件的命名约定

我已经搜索过这个问题的答案,但不幸的是我没有找到任何相关信息!本质上:Windows中内存映射文件的有效名称集是什么?他们可以多长时间?什么是合法字符,例如正斜杠、连字符、标点符号等是否合法?字符顺序是否有限制,例如mmf名称不能以下划线开头?编辑:我意识到这个问题的答案可能是“它们与Windows中的普通文件命名约定完全相同”。然而,重要的是要澄清这一点。 最佳答案 MemoryMappedFile.CreateNew对应于CreateFileMapping。documentationforCreateFileMapping说Th

c++ - 如何在 Windows 上预留内存并将以后的映射文件放入其中?

我想保留一个内存区域,然后将映射文件连续地放入保留的内存中。映射文件之间可能存在较大的时间间隔,在此期间其他函数可能会从堆中分配内存。映射后,文件可能无法取消映射并映射到新的内存位置。在Linux上会是这样的:#include#include#include#include#includeintmain(){void*memory=mmap(nullptr,getpagesize()*2,PROT_READ|PROT_WRITE,MAP_ANONYMOUS|MAP_PRIVATE|MAP_NORESERVE,-1,0);//reservememoryinthandle1=::open(

c++ - HALF_PTR Windows 数据类型

VS文档说明Halfthesizeofapointer.Usewithinastructurethatcontainsapointerandtwosmallfields.WindowsDataTypes确切地说,这种类型是什么?它是如何使用的? 最佳答案 注意:匿名结构不是标准的,但MSVC采用它们:union{int*aPointerstruct{HALF_PTRlowerBits;HALF_PTRupperBits;};}myvar;//Youcanbeassuredthisunionissizeof(int*)如果您认为它们不

函数内的Python多处理: calling pool.映射

我正在尝试使用mutltiprocessing包在一个函数中使用多个CPU。当我在函数外部运行玩具示例时,它会在四分之一秒内运行,没有任何问题(见下文)。frommultiprocessingimportPoolimporttimestart=time.clock()deff(x):returnx*xif__name__=='__main__':withPool(processes=7)aspool:result=pool.map(f,range(1000))print(time.clock()-start)但是,当我将相同的代码改编成一个函数时(见下文),它会打印True以指示__n

java - Windows:使用 File.listRoots 显示映射的网络驱动器

代码:importjava.io.*;publicclassTestFileRoots{publicstaticvoidmain(String[]args){for(Filef:File.listRoots()){System.out.println(f.getAbsolutePath());}}}当我启动cmd并运行此类时,我的所有驱动器都会列出。当我以管理员身份启动cmd并运行它时,未列出我映射的网络驱动器。另外,当我手动启动我的服务器并调用File.listRoots()时,我所有的驱动器都会被列出。但是当我使用服务启动服务器时,没有列出网络驱动器。如何始终列出我的网络驱动器?我

c++ - 内存模块是否映射到进程的虚拟空间?

我在Windows上看到函数EnumProcessModules返回为指定进程加载的多个模块(其中一些应该是系统dll,如guard32.dll、version.dll等。)我的问题是:这些模块是否映射到进程的虚拟空间?我可以从主应用程序代码跳转到位于这些模块之一的指令(当然知道地址)吗? 最佳答案 是的,DLL应该映射到进程虚拟地址空间。如果页面中的代码尚未执行,则映射可能不会得到真实物理页面的支持,并且当然执行“随机”代码位而没有正确的初始化或设置代码以正确执行(例如调用处理函数使用一些需要在另一个函数中分配的数据)显然会在一些